//
// Created by pengtg on 2020/2/23.
//

#ifndef ANDROIDVIDEOPLAYER_IOBSERVER_H
#define ANDROIDVIDEOPLAYER_IOBSERVER_H

#include "XData.h"
#include "XThread.h"
#include <vector>
#include <mutex>

//观察者 和 主体
class IObserver: public XThread {
public:
    //观察者接收数据函数
    virtual void Update(XData data){}

    //主体函数 添加观察者(线程安全)
    void AddObs(IObserver *obs);

    //通知所有观察者(线程安全)
    void Notify(XData data);

protected:
    std::vector<IObserver *>obss;
    //删除的时候可能会出问题，删除的时候再去通知，可能会crash。所以要把线程安全的问题考虑进来
    std::mutex mux;//互斥变量
};


#endif //ANDROIDVIDEOPLAYER_IOBSERVER_H
